using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.SGI.ERP.Entidades;
using MakeIT.SGI.ERP.Negocios;

namespace MakeIT.SGI.ERP.Apresentacao
{
	public partial class CadastroPessoa : System.Web.UI.Page
	{

		UsuarioVO usuarioVO = null;
		protected SgiDAOT SgiDAOT = null;

		protected void Page_Load(object sender, EventArgs e)
		{
			this.SgiDAOT = new SgiDAOT();
			usuarioVO = (UsuarioVO)this.Session["userActive"];

            if (!String.IsNullOrEmpty(txtCadIdPessoa.Text))
                atualizarDdlPessoaenderecoIdEnderecoTipo(null, null);

			if (!IsPostBack)
			{
				Util.HabilitarCampos(false, this.panelCad);
				atualizarDdlIdFilial(null, null);

                this.panelPerfilAdminxPessoa.Enabled = false;

				this.panelPessoaendereco.Enabled = false;
                atualizarDdlidUf(null, null);
                atualizarDdlidLogradouroTipo(null, null);
			}

		}

		protected void Page_Unload(object sender, EventArgs e)
		{
			try
			{
				if (this.SgiDAOT != null)
					this.SgiDAOT.closeDAO();
			}
			catch (Exception ex) {}
		}

		protected void grvResultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
		{
			this.grvResultado.PageIndex = e.NewPageIndex;
			btnPesquisa_Click(null, null);
		}
		protected void atualizarDdlIdFilial(object sender, ImageClickEventArgs e)
		{
			CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlCadIdFilial);

			CarregaDDL.carregaFilial(this.SgiDAOT, this.ddlIdFilial);

		}

		protected void atualizarDdlPessoaenderecoIdEnderecoTipo(object sender, ImageClickEventArgs e)
		{
            if (!String.IsNullOrEmpty(txtCadIdPessoa.Text))
                CarregaDDL.carregaTipoEndereco(this.SgiDAOT, ddlCadPessoaenderecoIdEnderecoTipo, this.SgiDAOT.getPessoa(Convert.ToInt32(txtCadIdPessoa.Text)).idFilial);
		}

        protected void atulizarDdlidLogradouro(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaLogradouro(this.SgiDAOT, ddlCadLogradouro, Convert.ToInt32(ddlCadBairro.SelectedValue), txtCadPessoaenderecoCEP.Text);
        }

        protected void atualizarDdlidLogradouroTipo(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaTipoLogradouro(this.SgiDAOT, ddlCadIdLogradouroTipo, null);
        }

        protected void atualizarDdlidCidade(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaCidade(this.SgiDAOT, ddlCadCidade, int.Parse(ddlCadEstado.SelectedValue));

            ddlCadCidade_SelectedIndexChanged(null, null);
        }

        protected void atualizarDdlidBairro(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaBairro(this.SgiDAOT, ddlCadBairro, int.Parse(ddlCadCidade.SelectedValue));
        }

        protected void atualizarDdlidUf(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaEstado(this.SgiDAOT, ddlCadEstado);

            ddlCadEstado_SelectedIndexChanged(null, null);
        }

		/// <summary>
		/// Manipula o evento do botão btnSalvar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnSalvar_Click(object sender, EventArgs e)
		{

			//Declara objetos
			PessoaVO pessoaVO = null;
			bool novoRegistro = false;

			try
			{
				//Verifica se o ID é nulo, se sim = cadastro novo
				if (string.IsNullOrEmpty(this.txtCadIdPessoa.Text))
				{
					pessoaVO = PessoaVO.CreateVO();
					pessoaVO.cadastro = DateTime.Now;
					pessoaVO.cadastradoPor = usuarioVO.user;

					novoRegistro = true;

				}
				//Recupera dados para serem alterados
				else
				{
					//Recupera dados
					pessoaVO = this.SgiDAOT.getPessoa(Int32.Parse(this.txtCadIdPessoa.Text));
				}

				pessoaVO.idFilial = Int32.Parse(this.ddlCadIdFilial.SelectedValue);
				pessoaVO.pessoa = this.txtCadPessoa.Text;
				if(string.IsNullOrEmpty(this.txtCadFantasia.Text))
					pessoaVO.fantasia = null;
				else
					pessoaVO.fantasia = this.txtCadFantasia.Text;
				if(string.IsNullOrEmpty(this.txtCadEmail.Text))
					pessoaVO.email = null;
				else
					pessoaVO.email = this.txtCadEmail.Text;
				if(string.IsNullOrEmpty(this.txtCadFone1.Text))
					pessoaVO.fone1 = null;
				else
					pessoaVO.fone1 = this.txtCadFone1.Text;
				if(string.IsNullOrEmpty(this.txtCadFone2.Text))
					pessoaVO.fone2 = null;
				else
					pessoaVO.fone2 = this.txtCadFone2.Text;
				if(string.IsNullOrEmpty(this.txtCadFone3.Text))
					pessoaVO.fone3 = null;
				else
					pessoaVO.fone3 = this.txtCadFone3.Text;
				pessoaVO.edicao = DateTime.Now;
				pessoaVO.editadoPor = usuarioVO.user;

				//Chama metodo para salvar ou criar novo registro
				if (novoRegistro)
					pessoaVO.idPessoa = (int)this.SgiDAOT.newPessoa(pessoaVO);
				else
					this.SgiDAOT.setPessoa(pessoaVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro salvo com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Atualiza formulario, apos salvar os dados
				this.txtCadIdPessoa.Text = pessoaVO.idPessoa.ToString();
				this.ltCadastradoPor.Text = pessoaVO.cadastradoPor;
				this.ltEditadoPor.Text = pessoaVO.editadoPor;
				this.ltDataCadastro.Text = pessoaVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = pessoaVO.edicao.ToString("dd/MM/yyyy");

				//habilita Pessoaendereco
				if (!this.panelPessoaendereco.Enabled)
				{
					this.ltCadPessoaenderecoPessoa.Text = pessoaVO.ToString();
					Util.HabilitarCampos(false, this.panelPessoaendereco);
					this.panelPessoaendereco.Enabled = true;
					this.btnCadPessoaenderecoSalvar.Enabled = false;
					this.btnCadPessoaenderecoEditar.Enabled = false;
					this.btnCadPessoaenderecoExcluir.Enabled = false;
					this.btnCadPessoaenderecoNovo.Enabled = true;
				}
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnPesquisa
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnPesquisa_Click(object sender, EventArgs e)
		{

			//Declara objetos
			int? idPessoa = null;
			int? idFilial = null;
			string pessoa = null;
			string fantasia = null;
			string email = null;

			try
			{

				if (!string.IsNullOrEmpty(this.txtIdPessoa.Text))
				{
					idPessoa = Int32.Parse(this.txtIdPessoa.Text);
				}

				if(!this.ddlIdFilial.SelectedValue.Equals("-1"))
				{
					idFilial = Int32.Parse(this.ddlIdFilial.SelectedValue);
				}

				if (!string.IsNullOrEmpty(this.txtPessoa.Text))
				{
					pessoa = this.txtPessoa.Text;
				}

				if (!string.IsNullOrEmpty(this.txtFantasia.Text))
				{
					fantasia = this.txtFantasia.Text;
				}

				if (!string.IsNullOrEmpty(this.txtEmail.Text))
				{
					email = this.txtEmail.Text;
				}


				//Recupera a lista de registros segundo a pesquisa
				this.grvResultado.DataSource = this.SgiDAOT.getPessoas(idPessoa, pessoa, idFilial, fantasia, email);

				//Vincula os dados
				this.grvResultado.DataBind();
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnCancelar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnCancelar_Click(object sender, EventArgs e)
		{
			//Volta para a tab page de pesquisa
			//this.tabPessoa.ActiveTabIndex = 0;

			// Desabilita os campos para edição
			Util.HabilitarCampos(false, this.panelCad);

			// Destrava botão de edição
			this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdPessoa.Text));

			// Destrava botão de exclusao
			this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdPessoa.Text));

			// Detrava botão de novo
			this.btnNovo.Enabled = true;

			// Desabilita o botão salvar
			this.btnSalvar.Enabled = false;

		}

		protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
		{
			// Declara objetos
			PessoaVO pessoaVO = null;
			int idPessoa = 0;

			try
			{
				//Recupera os argumentos com o ID do objeto
				string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
				idPessoa = Int32.Parse(argumentos[0]);

				//Recupera o objeto
				pessoaVO = this.SgiDAOT.getPessoa(idPessoa);

				this.txtCadIdPessoa.Text = pessoaVO.idPessoa.ToString();
				this.ddlCadIdFilial.SelectedValue = pessoaVO.idFilial.ToString();
				this.txtCadPessoa.Text = pessoaVO.pessoa;
				this.txtCadFantasia.Text = pessoaVO.fantasia;
				this.txtCadEmail.Text = pessoaVO.email;
				this.txtCadFone1.Text = pessoaVO.fone1;
				this.txtCadFone2.Text = pessoaVO.fone2;
				this.txtCadFone3.Text = pessoaVO.fone3;
				this.ltCadastradoPor.Text = pessoaVO.cadastradoPor;
				this.ltEditadoPor.Text = pessoaVO.editadoPor;
				this.ltDataCadastro.Text = pessoaVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = pessoaVO.edicao.ToString("dd/MM/yyyy");

				//recupera Pessoaendereco
				Util.LimparCampos(this.panelPessoaendereco);
				Util.HabilitarCampos(false, this.panelPessoaendereco);
				this.panelPessoaendereco.Enabled = true;
				this.ltCadPessoaenderecoPessoa.Text = pessoaVO.ToString();
				this.ltPessoaenderecoCadastradoPor.Text = "";
				this.ltPessoaenderecoDataCadastro.Text = "";
				this.ltPessoaenderecoDataEdicao.Text = "";
				this.ltPessoaenderecoEditadoPor.Text = "";
				this.btnCadPessoaenderecoSalvar.Enabled = false;
				this.btnCadPessoaenderecoEditar.Enabled = false;
				this.btnCadPessoaenderecoExcluir.Enabled = false;
				this.btnCadPessoaenderecoNovo.Enabled = true;
				this.grvCadPessoaxPessoaendereco.DataSource = this.SgiDAOT.getPessoaenderecos(null, pessoaVO.idPessoa, null, null, null, null, null);
				this.grvCadPessoaxPessoaendereco.DataBind();


                //recupera Usuarioxperfil
                Util.HabilitarCampos(false, this.panelPerfilAdminxPessoa);
                this.panelPerfilAdminxPessoa.Enabled = true;
                this.ltCadpanelPerfilAdminxPessoaXPefilAdmin.Text = pessoaVO.ToString();
                this.btnCadPerfilAdminxPessoaSalvar.Enabled = false;
                this.btnCadPerfilAdminxPessoaEditar.Enabled = true;

                carregaPerfilAdminxPessoas();
                this.gvPerfilAdminxPessoas.Enabled = false;

				//Habilita tab page do cadastro
				this.tabPessoa.ActiveTabIndex = 1;

				//Desabilita campos para edição
				Util.HabilitarCampos(false, this.panelCad);

				//Desabilita botão salvar
				this.btnSalvar.Enabled = false;

				//Habilita botão editar
				this.btnEditar.Enabled = true;

				//Habilita botão excluir
				this.btnExcluir.Enabled = true;

				//Habilita botão novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		// <summary>
		// Manipula o evento editar do web form
		// </summary>
		// <param name="sender">Objeto disparador de evento</param>
		// <param name="e">Argumento do evento</param>
		protected void btnEditar_Click(object sender, EventArgs e)
		{
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			// Trava apenas os text box da PK
			this.txtCadIdPessoa.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadPessoa.Focus();
		}

		protected void btnNovo_Click(object sender, EventArgs e)
		{
			//Limpa formulario, para a entrada de novo registro
			Util.LimparCampos(this.panelCad);
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			this.ltCadastradoPor.Text = "";
			this.ltEditadoPor.Text = "";
			this.ltDataCadastro.Text = "";
			this.ltDataEdicao.Text = "";

			// Limpa Pessoaendereco
			Util.LimparCampos(this.panelPessoaendereco);
			Util.HabilitarCampos(false, this.panelPessoaendereco);
			this.ltCadPessoaenderecoPessoa.Text = "";
			this.ltPessoaenderecoCadastradoPor.Text = "";
			this.ltPessoaenderecoDataCadastro.Text = "";
			this.ltPessoaenderecoDataEdicao.Text = "";
			this.ltPessoaenderecoEditadoPor.Text = "";
			this.grvCadPessoaxPessoaendereco.DataSource = null;
			this.grvCadPessoaxPessoaendereco.DataBind();
			this.panelPessoaendereco.Enabled = false;
			this.btnCadPessoaenderecoSalvar.Enabled = false;
			this.btnCadPessoaenderecoEditar.Enabled = false;
			this.btnCadPessoaenderecoExcluir.Enabled = false;
			this.btnCadPessoaenderecoNovo.Enabled = false;

			// Trava apenas os text box da PK
			this.txtCadIdPessoa.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadPessoa.Focus();

		}

		protected void btnExcluir_Click(object sender, EventArgs e)
		{
			//Declara objetos
			PessoaVO pessoaVO = null;

			try
			{
				//Cria objeto
				pessoaVO = PessoaVO.CreateVO();
				pessoaVO.idPessoa = Int32.Parse(this.txtCadIdPessoa.Text);

				//verifica se tem usuario dependentes deste registro
				if (this.SgiDAOT.getCountUsuarioxIdPessoa(pessoaVO.idPessoa) > 0)
				{
					Util.ExibeAlert(this, "Há Operadores do Sistema(s) associado(s) a este registro. Exclusão não permitida");
					return;
				}

				//verifica se tem cliente dependentes deste registro
				if (this.SgiDAOT.getCountClientexIdPessoa(pessoaVO.idPessoa) > 0)
				{
					Util.ExibeAlert(this, "Há Cliente(s) associado(s) a este registro. Exclusão não permitida");
					return;
				}

				//verifica se tem fornecedor dependentes deste registro
				if (this.SgiDAOT.getCountFornecedorxIdPessoa(pessoaVO.idPessoa) > 0)
				{
					Util.ExibeAlert(this, "Há Fornecedor(s) associado(s) a este registro. Exclusão não permitida");
					return;
				}

				//verifica se tem colaborador dependentes deste registro
				if (this.SgiDAOT.getCountColaboradorxIdPessoa(pessoaVO.idPessoa) > 0)
				{
					Util.ExibeAlert(this, "Há Colaborador(s) associado(s) a este registro. Exclusão não permitida");
					return;
				}

				//verifica se tem perfiladmxpessoa dependentes deste registro
				if (this.SgiDAOT.getCountPerfiladmxpessoaxIdPessoa(pessoaVO.idPessoa) > 0)
				{
					Util.ExibeAlert(this, "Há Perfil Administrativo X Pessoa(s) associado(s) a este registro. Exclusão não permitida");
					return;
				}

				// Remove Pessoaendereco
                List<PessoaenderecoVO> pessoaenderecoVOs = SgiDAOT.getPessoaenderecos(null, pessoaVO.idPessoa, null, null, null, null, null);
				foreach (PessoaenderecoVO pessoaenderecoVO in pessoaenderecoVOs)
					this.SgiDAOT.delPessoaendereco(pessoaenderecoVO);

				//Chama metodo para excluir registro
				this.SgiDAOT.delPessoa(pessoaVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro excluido com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Limpa formulario, apos salvar os dados
				Util.LimparCampos(this.panelCad);
				//Limpa Pessoaendereco
				Util.LimparCampos(this.panelPessoaendereco);
				Util.HabilitarCampos(false, this.panelPessoaendereco);
				this.panelPessoaendereco.Enabled = false;
				this.ltCadPessoaenderecoPessoa.Text = "";
				this.ltPessoaenderecoCadastradoPor.Text = "";
				this.ltPessoaenderecoDataCadastro.Text = "";
				this.ltPessoaenderecoDataEdicao.Text = "";
				this.ltPessoaenderecoEditadoPor.Text = "";
				this.grvCadPessoaxPessoaendereco.DataSource = null;
				this.grvCadPessoaxPessoaendereco.DataBind();
				this.btnCadPessoaenderecoSalvar.Enabled = false;
				this.btnCadPessoaenderecoEditar.Enabled = false;
				this.btnCadPessoaenderecoExcluir.Enabled = false;
				this.btnCadPessoaenderecoNovo.Enabled = false;

				this.ltCadastradoPor.Text = "";
				this.ltEditadoPor.Text = "";
				this.ltDataCadastro.Text = "";
				this.ltDataEdicao.Text = "";

				// Trava botão de edição
				this.btnEditar.Enabled = false;

				// Trava botão de exclusao
				this.btnExcluir.Enabled = false;

				// Desabilita o botão salvar
				this.btnSalvar.Enabled = false;

				// Habilita o botao novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
			
		}

        #region PessoaXPessoaendereco
        protected void btnCadPessoaenderecoSalvar_Click(object sender, EventArgs e)
        {

            //Declara objetos
            PessoaenderecoVO pessoaenderecoVO = null;
            bool novoRegistro = false;

            try
            {
                //Verifica se o ID é nulo, se sim = cadastro novo
                if (string.IsNullOrEmpty(this.txtCadPessoaenderecoIdPessoaEndereco.Text))
                {
                    pessoaenderecoVO = PessoaenderecoVO.CreateVO();
                    pessoaenderecoVO.cadastro = DateTime.Now;
                    pessoaenderecoVO.cadastradoPor = usuarioVO.user;

                    novoRegistro = true;

                }
                //Recupera dados para serem alterados
                else
                {
                    //Recupera dados
                    pessoaenderecoVO = this.SgiDAOT.getPessoaendereco(Int32.Parse(this.txtCadPessoaenderecoIdPessoaEndereco.Text));
                }

                pessoaenderecoVO.idPessoa = Int32.Parse(this.txtCadIdPessoa.Text);
                pessoaenderecoVO.idEnderecoTipo = Int32.Parse(this.ddlCadPessoaenderecoIdEnderecoTipo.SelectedValue);
                if (this.ddlCadIdLogradouroTipo.SelectedValue.Equals("-1"))
                    pessoaenderecoVO.idLogradouroTipo = null;
                else
                    pessoaenderecoVO.idLogradouroTipo = Int32.Parse(this.ddlCadIdLogradouroTipo.SelectedValue);
                


                if (string.IsNullOrEmpty(this.txtCadPessoaenderecoNumero.Text))
                    pessoaenderecoVO.numero = null;
                else
                    pessoaenderecoVO.numero = this.txtCadPessoaenderecoNumero.Text;
                if (string.IsNullOrEmpty(this.txtCadPessoaenderecoComplemento.Text))
                    pessoaenderecoVO.complemento = null;
                else
                    pessoaenderecoVO.complemento = this.txtCadPessoaenderecoComplemento.Text;
                if (string.IsNullOrEmpty(this.txtCadPessoaenderecoCEP.Text))
                    pessoaenderecoVO.cEP = null;
                else
                    pessoaenderecoVO.cEP = this.txtCadPessoaenderecoCEP.Text;
                
                if (this.ddlCadCidade.SelectedValue.Equals("-1"))
                    pessoaenderecoVO.idCidade = null;
                else
                    pessoaenderecoVO.idCidade = Int32.Parse(this.ddlCadCidade.SelectedValue);
                
                pessoaenderecoVO.edicao = DateTime.Now;
                pessoaenderecoVO.editadoPor = usuarioVO.user;

                if (cbEnderecoManual.Checked)
                {
                    if (string.IsNullOrEmpty(this.txtCadPessoaenderecoLogradouro.Text))
                        pessoaenderecoVO.logradouro = null;
                    else
                        pessoaenderecoVO.logradouro = this.txtCadPessoaenderecoLogradouro.Text;
                    if (string.IsNullOrEmpty(this.txtCadPessoaenderecoBairro.Text))
                        pessoaenderecoVO.bairro = null;
                    else
                        pessoaenderecoVO.bairro = this.txtCadPessoaenderecoBairro.Text;

                    pessoaenderecoVO.idLogradouro = null;
                    pessoaenderecoVO.idBairro = null;
                }
                else
                {
                    if (this.ddlCadLogradouro.SelectedValue.Equals("-1"))
                        pessoaenderecoVO.idLogradouro = null;
                    else
                        pessoaenderecoVO.idLogradouro = Int32.Parse(this.ddlCadLogradouro.SelectedValue);
                    if (this.ddlCadBairro.SelectedValue.Equals("-1"))
                        pessoaenderecoVO.idBairro = null;
                    else
                        pessoaenderecoVO.idBairro = Int32.Parse(this.ddlCadBairro.SelectedValue);

                    pessoaenderecoVO.logradouro = null;
                    pessoaenderecoVO.bairro = null;
                }

                //Chama metodo para salvar ou criar novo registro
                if (novoRegistro)
                    pessoaenderecoVO.idPessoaEndereco = (int)this.SgiDAOT.newPessoaendereco(pessoaenderecoVO);
                else
                    this.SgiDAOT.setPessoaendereco(pessoaenderecoVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");

                //Popula grid atualizado
                this.btnPesquisa_Click(null, null);

                //Atualiza formulario, apos salvar os dados
                this.txtCadPessoaenderecoIdPessoaEndereco.Text = pessoaenderecoVO.idPessoaEndereco.ToString();
                this.ltPessoaenderecoCadastradoPor.Text = pessoaenderecoVO.cadastradoPor;
                this.ltPessoaenderecoEditadoPor.Text = pessoaenderecoVO.editadoPor;
                this.ltPessoaenderecoDataCadastro.Text = pessoaenderecoVO.cadastro.ToString("dd/MM/yyyy");
                this.ltPessoaenderecoDataEdicao.Text = pessoaenderecoVO.edicao.ToString("dd/MM/yyyy");

                this.grvCadPessoaxPessoaendereco.DataSource = this.SgiDAOT.getPessoaenderecos(null, Int32.Parse(this.txtCadIdPessoa.Text), null, null, null, null, null);
                this.grvCadPessoaxPessoaendereco.DataBind();

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        protected void btnCadPessoaenderecoCancelar_Click(object sender, EventArgs e)
        {
            //Volta para a tab page de pesquisa
            //this.tabPessoa.ActiveTabIndex = 0;

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.panelPessoaendereco);

            // Destrava botão de edição
            this.btnCadPessoaenderecoEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadPessoaenderecoIdPessoaEndereco.Text));

            // Destrava botão de exclusao
            this.btnCadPessoaenderecoExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadPessoaenderecoIdPessoaEndereco.Text));

            // Detrava botão de novo
            this.btnCadPessoaenderecoNovo.Enabled = true;

            // Desabilita o botão salvar
            this.btnCadPessoaenderecoSalvar.Enabled = false;

        }

        protected void btnCadPessoaenderecoEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelPessoaendereco);

            // Trava apenas os text box da PK
            this.txtCadPessoaenderecoIdPessoaEndereco.Enabled = false;

            // Trava botão de edição
            this.btnCadPessoaenderecoEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnCadPessoaenderecoExcluir.Enabled = false;

            // Trava botão de novo
            this.btnCadPessoaenderecoNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnCadPessoaenderecoSalvar.Enabled = true;

            if (cbEnderecoManual.Checked)
                ddlCadIdLogradouroTipo.Enabled = true;
            else
                ddlCadIdLogradouroTipo.Enabled = false;

        }

        protected void btnCadPessoaenderecoExcluir_Click(object sender, EventArgs e)
        {
            //Declara objetos
            PessoaenderecoVO pessoaenderecoVO = null;

            try
            {
                //Cria objeto
                pessoaenderecoVO = PessoaenderecoVO.CreateVO();
                pessoaenderecoVO.idPessoaEndereco = Int32.Parse(this.txtCadPessoaenderecoIdPessoaEndereco.Text);

                //Chama metodo para excluir registro
                this.SgiDAOT.delPessoaendereco(pessoaenderecoVO);

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro excluido com sucesso!");

                //Limpa formulario, apos salvar os dados
                Util.LimparCampos(this.panelPessoaendereco);
                Util.HabilitarCampos(false, this.panelPessoaendereco);
                this.grvCadPessoaxPessoaendereco.DataSource = this.SgiDAOT.getPessoaenderecos(null, Int32.Parse(this.txtCadIdPessoa.Text), null, null, null, null, null);
                this.grvCadPessoaxPessoaendereco.DataBind();

                this.ltPessoaenderecoCadastradoPor.Text = "";
                this.ltPessoaenderecoEditadoPor.Text = "";
                this.ltPessoaenderecoDataCadastro.Text = "";
                this.ltPessoaenderecoDataEdicao.Text = "";

                // Trava botão de edição
                this.btnCadPessoaenderecoEditar.Enabled = false;

                // Trava botão de exclusao
                this.btnCadPessoaenderecoExcluir.Enabled = false;

                // Desabilita o botão salvar
                this.btnCadPessoaenderecoSalvar.Enabled = false;

                // Habilita o botao novo
                this.btnCadPessoaenderecoNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }

        }
        protected void btnCadPessoaenderecoNovo_Click(object sender, EventArgs e)
        {
            //Limpa formulario, para a entrada de novo registro
            Util.LimparCampos(this.panelPessoaendereco);
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelPessoaendereco);

            cbEnderecoManual.Checked = false;
            cbEnderecoManual_checkedChanged(null, null);

            ddlCadLogradouro.SelectedValue = "-1";
            ddlCadLogradouro_SelectedIndexChanged(null, null);
            ddlCadBairro.SelectedValue = "-1";
            ddlCadBairro_SelectedIndexChanged(null, null);
            ddlCadCidade.SelectedValue = "-1";
            ddlCadCidade_SelectedIndexChanged(null, null);
            ddlCadEstado.SelectedValue = "-1";
            ddlCadEstado_SelectedIndexChanged(null, null);


            this.ltPessoaenderecoCadastradoPor.Text = "";
            this.ltPessoaenderecoEditadoPor.Text = "";
            this.ltPessoaenderecoDataCadastro.Text = "";
            this.ltPessoaenderecoDataEdicao.Text = "";

            // Trava apenas os text box da PK
            this.txtCadPessoaenderecoIdPessoaEndereco.Enabled = false;

            // Trava botão de edição
            this.btnCadPessoaenderecoEditar.Enabled = false;

            // Trava botão de exclusao
            this.btnCadPessoaenderecoExcluir.Enabled = false;

            // Trava botão de novo
            this.btnCadPessoaenderecoNovo.Enabled = false;

            // Habilita o botão salvar
            this.btnCadPessoaenderecoSalvar.Enabled = true;

            ddlCadIdLogradouroTipo.Enabled = false;

        }

        protected void imgbCadPessoaenderecoVisualizar_Click(object sender, ImageClickEventArgs e)
        {
            // Declara objetos
            PessoaenderecoVO pessoaenderecoVO = null;
            int idPessoaEndereco = 0;

            try
            {
                //Recupera os argumentos com o ID do objeto
                string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
                idPessoaEndereco = Int32.Parse(argumentos[0]);

                //Recupera o objeto
                pessoaenderecoVO = this.SgiDAOT.getPessoaendereco(idPessoaEndereco);

                this.txtCadPessoaenderecoIdPessoaEndereco.Text = pessoaenderecoVO.idPessoaEndereco.ToString();
                this.ddlCadPessoaenderecoIdEnderecoTipo.SelectedValue = pessoaenderecoVO.idEnderecoTipo.ToString();
                if (pessoaenderecoVO.idLogradouroTipo == null)
                    this.ddlCadIdLogradouroTipo.SelectedValue = "-1";
                else
                    this.ddlCadIdLogradouroTipo.SelectedValue = pessoaenderecoVO.idLogradouroTipo.Value.ToString();
                this.txtCadPessoaenderecoNumero.Text = pessoaenderecoVO.numero;
                this.txtCadPessoaenderecoComplemento.Text = pessoaenderecoVO.complemento;
                this.txtCadPessoaenderecoCEP.Text = pessoaenderecoVO.cEP;
                
                
                this.ltPessoaenderecoCadastradoPor.Text = pessoaenderecoVO.cadastradoPor;
                this.ltPessoaenderecoEditadoPor.Text = pessoaenderecoVO.editadoPor;
                this.ltPessoaenderecoDataCadastro.Text = pessoaenderecoVO.cadastro.ToString("dd/MM/yyyy");
                this.ltPessoaenderecoDataEdicao.Text = pessoaenderecoVO.edicao.ToString("dd/MM/yyyy");

                pessoaenderecoVO.idCidadeVO = this.SgiDAOT.getCidade(pessoaenderecoVO.idCidade);
                this.ddlCadEstado.SelectedValue = pessoaenderecoVO.idCidadeVO.idUf.ToString();
                ddlCadEstado_SelectedIndexChanged(null, null);
                this.ddlCadCidade.SelectedValue = pessoaenderecoVO.idCidade.Value.ToString();

                if (pessoaenderecoVO.idLogradouro != null)
                {
                    cbEnderecoManual.Checked = false;
                    cbEnderecoManual_checkedChanged(null, null);
                    
                    ddlCadCidade_SelectedIndexChanged(null, null);
                    this.ddlCadBairro.SelectedValue = pessoaenderecoVO.idBairro.Value.ToString();
                    ddlCadBairro_SelectedIndexChanged(null, null);
                    this.ddlCadLogradouro.SelectedValue = pessoaenderecoVO.idLogradouro.Value.ToString();
                    ddlCadLogradouro_SelectedIndexChanged(null, null);

                }
                else
                {
                    cbEnderecoManual.Checked = true;
                    cbEnderecoManual_checkedChanged(null, null);

                    this.txtCadPessoaenderecoLogradouro.Text = pessoaenderecoVO.logradouro;
                    this.txtCadPessoaenderecoBairro.Text = pessoaenderecoVO.bairro;
                }

                //Desabilita campos para edição
                Util.HabilitarCampos(false, this.panelPessoaendereco);

                //Desabilita botão salvar
                this.btnCadPessoaenderecoSalvar.Enabled = false;

                //Habilita botão editar
                this.btnCadPessoaenderecoEditar.Enabled = true;

                //Habilita botão excluir
                this.btnCadPessoaenderecoExcluir.Enabled = true;

                //Habilita botão novo
                this.btnCadPessoaenderecoNovo.Enabled = true;

            }
            catch (Exception ex)
            {

                throw ex;
            }
        }

        protected void ddlCadEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (sender != null && e != null)
            {
                CarregaDDL.carregaCidade(this.SgiDAOT, ddlCadCidade, int.Parse(ddlCadEstado.SelectedValue));
            }
            else
            {
                CarregaDDL.carregaCidade(this.SgiDAOT, ddlCadCidade, int.Parse(ddlCadEstado.SelectedValue));
            }

            ddlCadCidade_SelectedIndexChanged(null, null);
        }

        protected void ddlCadCidade_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlCadCidade.Items.Count > 0)
                CarregaDDL.carregaBairro(this.SgiDAOT, ddlCadBairro, int.Parse(ddlCadCidade.SelectedValue));
            else
                CarregaDDL.carregaBairro(this.SgiDAOT, ddlCadBairro, null);


            ddlCadBairro_SelectedIndexChanged(null, null);
        }

        protected void ddlCadBairro_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlCadIdLogradouroTipo.SelectedIndex = 0;
            atulizarDdlidLogradouro(null, null);
            ddlCadLogradouro_SelectedIndexChanged(null, null);
        }

        protected void ddlCadLogradouro_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (!ddlCadLogradouro.SelectedValue.Equals("-1"))
            {
                LogradouroVO lVO = this.SgiDAOT.getLogradouro(Convert.ToInt32(ddlCadLogradouro.SelectedValue));
                ddlCadIdLogradouroTipo.SelectedValue = Convert.ToString(lVO.idLogradouroTipo);
                txtCadPessoaenderecoCEP.Text = lVO.cEP;
            }
            else
            {
                ddlCadIdLogradouroTipo.SelectedValue = "-1";
                txtCadPessoaenderecoCEP.Text = String.Empty;
            }
        }

        protected void btnPesquisarEndereco_Click(object sender, ImageClickEventArgs e)
        {
            if (!String.IsNullOrEmpty(txtCadPessoaenderecoCEP.Text))
                pesquisaLogradouroCep();
        }

        protected void pesquisaLogradouroCep()
        {
            LogradouroVO lVO = this.SgiDAOT.getLogradouro(null, null, null, null, txtCadPessoaenderecoCEP.Text);

            if (lVO != null)
            {
                lVO.idBairroVO = this.SgiDAOT.getBairro(lVO.idBairro);
                lVO.idBairroVO.idCidadeVO = this.SgiDAOT.getCidade(lVO.idBairroVO.idCidade);

                ddlCadEstado.SelectedValue = Convert.ToString(lVO.idBairroVO.idCidadeVO.idUf);
                ddlCadEstado_SelectedIndexChanged(null, null);

                ddlCadCidade.SelectedValue = Convert.ToString(lVO.idBairroVO.idCidade);
                ddlCadCidade_SelectedIndexChanged(null, null);

                ddlCadBairro.SelectedValue = Convert.ToString(lVO.idBairro);
                ddlCadBairro_SelectedIndexChanged(null, null);

                ddlCadLogradouro.SelectedValue = Convert.ToString(lVO.idLogradouro);
                ddlCadLogradouro_SelectedIndexChanged(null, null);
            }
            else
            {
                Util.ExibeAlert(this, "CEP não encontrado");
            }
        }

        protected void cbEnderecoManual_checkedChanged(object sender, EventArgs e)
        {
            ddlCadBairro.SelectedValue = "-1";
            ddlCadBairro_SelectedIndexChanged(null, null);
            txtCadPessoaenderecoBairro.Text = String.Empty;

            ddlCadLogradouro.SelectedValue = "-1";
            ddlCadLogradouro_SelectedIndexChanged(null, null);
            txtCadPessoaenderecoLogradouro.Text = String.Empty;

            if (cbEnderecoManual.Checked)
            {
                pnlBairroDDL.Visible = false;
                pnlBairroDDL.Enabled = false;
                pnlBairroTXT.Visible = true;
                pnlBairroTXT.Enabled = true;

                pnlLogradouroDDL.Visible = false;
                pnlLogradouroDDL.Enabled = false;
                pnlLogradouroTXT.Visible = true;
                pnlLogradouroTXT.Enabled = true;

                ddlCadIdLogradouroTipo.Enabled = true;
            }
            else
            {
                pnlBairroDDL.Visible = true;
                pnlBairroDDL.Enabled = true;
                pnlBairroTXT.Visible = false;
                pnlBairroTXT.Enabled = false;

                pnlLogradouroDDL.Visible = true;
                pnlLogradouroDDL.Enabled = true;
                pnlLogradouroTXT.Visible = false;
                pnlLogradouroTXT.Enabled = false;

                ddlCadIdLogradouroTipo.Enabled = false;
            }
        }

        #endregion

        #region UsuarioXUsuarioxPerfil



        protected void carregaPerfilAdminxPessoas()
        {
            List<PerfiladmVO> perfilAdminVOLista = new List<PerfiladmVO>();

            if (!String.IsNullOrEmpty(txtCadIdPessoa.Text))
            {
                foreach (FilialVO fVOItem in SgiDAOT.getFilials(SgiDAOT.getPessoa(Convert.ToInt32(txtCadIdPessoa.Text)).idFilial))
                {
                    foreach (PerfiladmVO paVOItem in SgiDAOT.getPerfiladms(null, null, fVOItem.idFilial))
                    {
                        perfilAdminVOLista.Add(paVOItem);
                    }
                }
            }

            gvPerfilAdminxPessoas.DataSource = perfilAdminVOLista;
            gvPerfilAdminxPessoas.DataBind();
        }

        protected void gvPerfilAdminxPessoas_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (!String.IsNullOrEmpty(txtCadIdPessoa.Text))
                {
                    int idPerfilAdmin = int.Parse(((HiddenField)e.Row.FindControl("hfIdPerfil")).Value);
                    int idPessoa = int.Parse(txtCadIdPessoa.Text);

                    PerfiladmxpessoaVO ppVO = SgiDAOT.getPerfiladmxpessoa(null, idPessoa, idPerfilAdmin);

                    if (ppVO != null)
                    {
                        CheckBox cb = (CheckBox)e.Row.FindControl("cbPertence");
                        cb.Checked = true;
                    }
                }
            }
        }


        protected void btnCadPerfilAdminxPessoaSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                this.SgiDAOT.transactionBegin();

                foreach (GridViewRow row in gvPerfilAdminxPessoas.Rows)
                {
                    if (!String.IsNullOrEmpty(txtCadIdPessoa.Text))
                    {
                        int idPerfilAdmin = int.Parse(((HiddenField)row.FindControl("hfIdPerfil")).Value);
                        int idPessoa = int.Parse(txtCadIdPessoa.Text);

                        CheckBox cb1 = (CheckBox)row.FindControl("cbPertence");

                        PerfiladmxpessoaVO ppVO = SgiDAOT.getPerfiladmxpessoa(null, idPessoa, idPerfilAdmin);


                        if (cb1.Checked)
                        {
                            PerfiladmxpessoaVO ppVOAcao = PerfiladmxpessoaVO.CreateVO();


                            ppVOAcao.idPessoa = idPessoa;
                            ppVOAcao.idPerfilAdm = idPerfilAdmin;


                            ppVOAcao.editadoPor = this.usuarioVO.user;
                            ppVOAcao.edicao = DateTime.Now;

                            if (ppVO != null)
                            {
                                ppVOAcao.idPerfilAdmXPessoa = ppVO.idPerfilAdmXPessoa;
                                SgiDAOT.setPerfiladmxpessoa(ppVOAcao);
                            }
                            else
                            {
                                ppVOAcao.cadastradoPor = this.usuarioVO.user;
                                ppVOAcao.cadastro = DateTime.Now;

                                SgiDAOT.newPerfiladmxpessoa(ppVOAcao);
                            }
                        }
                        else
                        {
                            if (ppVO != null)
                            {
                                SgiDAOT.delPerfiladmxpessoa(ppVO);
                            }
                        }
                    }
                }

                this.SgiDAOT.transactionCommit();

                // Exibe msg de sucesso ao salvar registro
                Util.ExibeAlert(this, "Registro salvo com sucesso!");


            }
            catch (Exception ex1)
            {
                try
                {
                    if (this.SgiDAOT != null)
                        this.SgiDAOT.transactionRollBack();
                    Util.ExibeAlert(this, "Registro NÃO salvo! Erro: " + ex1.Message);
                }
                catch (Exception ex2)
                {
                    Util.ExibeAlert(this, "Problema inesperado ao salvar! Erro: " + ex2.Message);
                }
            }


        }

        protected void btnCadPerfilAdminxPessoaCancelar_Click(object sender, EventArgs e)
        {

            // Desabilita os campos para edição
            Util.HabilitarCampos(false, this.panelPerfilAdminxPessoa);

            this.btnCadPerfilAdminxPessoaEditar.Enabled = true;

            // Desabilita o botão salvar
            this.btnCadPerfilAdminxPessoaSalvar.Enabled = false;

            this.gvPerfilAdminxPessoas.Enabled = false;

        }

        protected void btnCadPerfilAdminxPessoaEditar_Click(object sender, EventArgs e)
        {
            // Habilita os campos para edição
            Util.HabilitarCampos(true, this.panelPerfilAdminxPessoa);

            this.btnCadPerfilAdminxPessoaEditar.Enabled = false;

            this.btnCadPerfilAdminxPessoaSalvar.Enabled = true;

            this.gvPerfilAdminxPessoas.Enabled = true;
        }




        protected void cbPertenceTodos_CheckedChanged(object sender, EventArgs e)
        {
            foreach (GridViewRow row in gvPerfilAdminxPessoas.Rows)
            {
                CheckBox cb = (CheckBox)row.FindControl("cbPertence");
                cb.Checked = ((CheckBox)sender).Checked;
            }
        }

        protected void btnResetPertence_Click(object sender, ImageClickEventArgs e)
        {
            resetCheckBoxPerfil("cbPertenceTodos", "cbPertence");
        }

        protected void resetCheckBoxPerfil(string IdCheckBoxPai, string IdCheckBoxFilho)
        {
            CheckBox cb = null;
            cb = (CheckBox)gvPerfilAdminxPessoas.HeaderRow.FindControl(IdCheckBoxPai);
            cb.Checked = false;

            foreach (GridViewRow row in gvPerfilAdminxPessoas.Rows)
            {
                if (!String.IsNullOrEmpty(txtCadIdPessoa.Text))
                {

                    int idPerfilAdmin = int.Parse(((HiddenField)row.FindControl("hfIdPerfil")).Value);
                    int idPessoa = int.Parse(txtCadIdPessoa.Text);

                    PerfiladmxpessoaVO ppVO = SgiDAOT.getPerfiladmxpessoa(null, idPessoa, idPerfilAdmin);

                    cb = (CheckBox)row.FindControl(IdCheckBoxFilho);
                    
                    if (ppVO != null)
                    {
                        cb.Checked = true;
                    }
                    else
                    {
                        cb.Checked = false;
                    }
                }
            }
        }



        #endregion

	}
}
